package edu.unmsm.ocaa.sisocaa.integracion.dao.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ibatis.sqlmap.client.SqlMapClient;

import edu.unmsm.ocaa.sisocaa.integracion.dao.UsuarioDAO;
import edu.unmsm.ocaa.sisocaa.negocio.model.dto.UsuarioDTO;

@Repository
public class UsuarioDAOImpl extends SqlMapClientDaoSupport implements UsuarioDAO {

	@Autowired
	public UsuarioDAOImpl(SqlMapClient sqlMapClient) {
		super.setSqlMapClient(sqlMapClient);
		// TODO Auto-generated constructor stub
	}
		
	@Transactional(readOnly=true)
	public UsuarioDTO getUsuario(String nik) throws DataAccessException {
		// TODO Auto-generated method stub
		//nik="'%"+nik+"%'";
		try {
			UsuarioDTO usu;
			if (nik.equals("admin")) {
				usu=(UsuarioDTO)getSqlMapClientTemplate().queryForObject("getUsuarioAdmin",nik);
			} else {
				usu=(UsuarioDTO)getSqlMapClientTemplate().queryForObject("getUsuario",nik);
			}
			
			return usu;
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return null;
		}
		
		
	}

	@Transactional
	public void insertUsuario(UsuarioDTO usu) throws DataAccessException{
		// TODO Auto-generated method stub
		try {
			getSqlMapClientTemplate().insert("insertUsuario", usu);	
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

	@Override
	public void updateUsuario(UsuarioDTO usu) throws DataAccessException {
		getSqlMapClientTemplate().insert("updateUsuario", usu);
	}

	@Override
	public List<UsuarioDTO> getUsuarios(Integer id_dep) throws DataAccessException {
		try {
			Map map= new HashMap();
			map.put("id_dep", id_dep);
			return (List<UsuarioDTO>)getSqlMapClientTemplate().queryForList("getUsuarios", map);	
		} catch (DataAccessException e) {
			e.printStackTrace();
			return null;
		}
		
	}

	@Override
	public List<UsuarioDTO> getUsuarioxDni(String dni) {
		// TODO Auto-generated method stub
		return (List<UsuarioDTO>)getSqlMapClientTemplate().queryForList("getUsuarioxDni", dni);
	}

	@Override
	public List<UsuarioDTO> getUsuarioxNik(String nik) {
		// TODO Auto-generated method stub
		return (List<UsuarioDTO>)getSqlMapClientTemplate().queryForList("getUsuarioxNik", nik);
	}

	@Override
	public Integer getMaxIdUsuario() throws DataAccessException {
		// TODO Auto-generated method stub
		return (Integer)getSqlMapClientTemplate().queryForObject("getMaxIdUsu");
	}

	@Override
	public void deleteUsuario(Integer usuid) throws DataAccessException {
		getSqlMapClientTemplate().delete("deleteUsuario", usuid);
	}

}
